60806040526000600a553480156200001657600080fd5b50604051620053cd380380620053cd8339810160408190526200003991620002e1565b8151829082906200005290600090602085019062000184565b5080516200006890600190602084019062000184565b505050620000856200007f6200012e60201b60201c565b62000132565b60408051808201825260008082526020808301828152600c8054600181018255935292517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7909201805493511515600160a01b026001600160a81b03199094166001600160a01b03939093169290921792909217905581518083019092526004808352636865726f60e01b929091019182526200012591600f9162000184565b5050506200039e565b3390565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000192906200034b565b90600052602060002090601f016020900481019282620001b6576000855562000201565b82601f10620001d157805160ff191683800117855562000201565b8280016001018555821562000201579182015b8281111562000201578251825591602001919060010190620001e4565b506200020f92915062000213565b5090565b5b808211156200020f576000815560010162000214565b600082601f8301126200023c57600080fd5b81516001600160401b038082111562000259576200025962000388565b604051601f8301601f19908116603f0116810190828211818310171562000284576200028462000388565b81604052838152602092508683858801011115620002a157600080fd5b600091505b83821015620002c55785820183015181830184015290820190620002a6565b83821115620002d75760008385830101525b9695505050505050565b60008060408385031215620002f557600080fd5b82516001600160401b03808211156200030d57600080fd5b6200031b868387016200022a565b935060208501519150808211156200033257600080fd5b5062000341858286016200022a565b9150509250929050565b600181811c908216806200036057607f821691505b602082108114156200038257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b61501f80620003ae6000396000f3fe6080604052600436106102d15760003560e01c806378fbb04f11610179578063a776ca4c116100d6578063ccde54e61161008a578063e985e9c511610064578063e985e9c514610826578063f2fde38b1461087c578063f3993d111461089c57600080fd5b8063ccde54e6146107c4578063d0ebdbe7146107d9578063d4305eeb146107f957600080fd5b8063b66f599c116100bb578063b66f599c14610771578063b88d4fde14610791578063c87b56dd146107a457600080fd5b8063a776ca4c1461073c578063aaf296511461075157600080fd5b80638da5cb5b1161012d578063a22cb46511610112578063a22cb465146106dc578063a459556c146106fc578063a647e8ec1461071c57600080fd5b80638da5cb5b1461069c57806395d89b41146106c757600080fd5b80637f0b02651161015e5780637f0b02651461062857806381f780951461065c578063897c59f41461067c57600080fd5b806378fbb04f146105e85780637ec4a6591461060857600080fd5b806338c9c73c1161023257806362b99ad4116101e657806370a08231116101c057806370a0823114610567578063713aca7414610587578063715018a6146105d357600080fd5b806362b99ad4146105125780636352211e14610527578063690e7c091461054757600080fd5b806342842e0e1161021757806342842e0e146104b2578063481c6a75146104c55780634cd01f90146104f257600080fd5b806338c9c73c1461045857806341d35efc1461048557600080fd5b80630f7228ef1161028957806323185dc91161026e57806323185dc9146103f857806323b872dd1461042557806328cfbd461461043857600080fd5b80630f7228ef146103a757806318160ddd146103e257600080fd5b806306fdde03116102ba57806306fdde031461032d578063081812fc1461034f578063095ea7b31461039457600080fd5b806301ffc9a7146102d6578063034601ec1461030b575b600080fd5b3480156102e257600080fd5b506102f66102f13660046147a8565b6108bc565b60405190151581526020015b60405180910390f35b34801561031757600080fd5b5061032b61032636600461449a565b6109a1565b005b34801561033957600080fd5b506103426109c1565b6040516103029190614bbc565b34801561035b57600080fd5b5061036f61036a3660046148ac565b610a4f565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610302565b61032b6103a236600461465b565b610b08565b3480156103b357600080fd5b506103d46103c23660046148ac565b600e6020526000908152604090205481565b604051908152602001610302565b3480156103ee57600080fd5b506103d4600a5481565b34801561040457600080fd5b50610418610413366004614687565b610c78565b6040516103029190614ba9565b61032b610433366004614585565b610ddf565b34801561044457600080fd5b5061032b6104533660046144fc565b610dea565b34801561046457600080fd5b506103d4610473366004614427565b600d6020526000908152604090205481565b34801561049157600080fd5b506104a56104a036600461485e565b610f73565b6040516103029190614ae8565b61032b6104c0366004614585565b610fa8565b3480156104d157600080fd5b5060095461036f9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104fe57600080fd5b5061032b61050d3660046148c5565b610fc3565b34801561051e57600080fd5b50610342611159565b34801561053357600080fd5b5061036f6105423660046148ac565b611166565b34801561055357600080fd5b5061032b6105623660046148ac565b6111f2565b34801561057357600080fd5b506103d4610582366004614427565b6116a3565b34801561059357600080fd5b506105a76105a23660046148ac565b61174b565b6040805173ffffffffffffffffffffffffffffffffffffffff9093168352901515602083015201610302565b3480156105df57600080fd5b5061032b61179e565b3480156105f457600080fd5b5061032b610603366004614427565b6117b2565b34801561061457600080fd5b5061032b6106233660046147e2565b61197f565b34801561063457600080fd5b506103d47fffffffffffffffffffffffffffffffffffff000000000000000000000000000081565b34801561066857600080fd5b5061032b6106773660046148ea565b61199e565b34801561068857600080fd5b506103d46106973660046147e2565b611a0f565b3480156106a857600080fd5b5060075473ffffffffffffffffffffffffffffffffffffffff1661036f565b3480156106d357600080fd5b50610342611a39565b3480156106e857600080fd5b5061032b6106f7366004614626565b611a46565b34801561070857600080fd5b506102f6610717366004614817565b611add565b34801561072857600080fd5b5061032b6107373660046146bc565b611b17565b34801561074857600080fd5b50600c546103d4565b34801561075d57600080fd5b506102f661076c366004614817565b611ddd565b34801561077d57600080fd5b506102f661078c366004614817565b611e08565b61032b61079f3660046145c6565b611e3b565b3480156107b057600080fd5b506103426107bf3660046148ac565b611fbe565b3480156107d057600080fd5b50610342612437565b3480156107e557600080fd5b5061032b6107f4366004614427565b612444565b34801561080557600080fd5b5061081961081436600461490d565b612493565b6040516103029190614b42565b34801561083257600080fd5b506102f6610841366004614461565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260066020908152604080832093909416825291909152205460ff1690565b34801561088857600080fd5b5061032b610897366004614427565b6125bd565b3480156108a857600080fd5b5061032b6108b736600461449a565b612674565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000148061094f57507fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000145b8061099b57507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b92915050565b6109bc83838360405180602001604052806000815250610dea565b505050565b600080546109ce90614dcd565b80601f01602080910402602001604051908101604052809291908181526020018280546109fa90614dcd565b8015610a475780601f10610a1c57610100808354040283529160200191610a47565b820191906000526020600020905b815481529060010190602001808311610a2a57829003601f168201915b505050505081565b60008181526004602052604081205473ffffffffffffffffffffffffffffffffffffffff16610adf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f6e6f626f6479206f776e207468656e20746f6b656e000000000000000000000060448201526064015b60405180910390fd5b5060009081526005602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60008181526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1633811480610b6b575073ffffffffffffffffffffffffffffffffffffffff8116600090815260066020908152604080832033845290915290205460ff165b610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f73656e646572206d757374206265206f776e6572206f7220617070726f76656460448201527f20666f7220616c6c0000000000000000000000000000000000000000000000006064820152608401610ad6565b60008281526005602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b606073ffffffffffffffffffffffffffffffffffffffff8416610cf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f6f776e6572206973207a65726f206164647265737300000000000000000000006044820152606401610ad6565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260026020526040902082610d2657805492505b6000610d328585614d8a565b67ffffffffffffffff811115610d4a57610d4a614f2a565b604051908082528060200260200182016040528015610d73578160200160208202803683370190505b509050845b84811015610dd557828181548110610d9257610d92614efb565b9060005260206000200154828783610daa9190614d8a565b81518110610dba57610dba614efb565b6020908102919091010152610dce81614e21565b9050610d78565b5095945050505050565b6109bc838383612a6d565b610df5848484612674565b73ffffffffffffffffffffffffffffffffffffffff83163b15610f6d576040517f0f7b88e3000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff851690630f7b88e390610e6c903390899088908890600401614a49565b602060405180830381600087803b158015610e8657600080fd5b505af1158015610e9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ebe91906147c5565b7fffffffff000000000000000000000000000000000000000000000000000000001614610f6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f6f6e4552433732314578526563656976656428292072657475726e20696e766160448201527f6c696400000000000000000000000000000000000000000000000000000000006064820152608401610ad6565b50505050565b6060610fa08383600887604051610f8a91906149fe565b9081526040519081900360200190209190612e17565b949350505050565b6109bc83838360405180602001604052806000815250611e3b565b610fcb612f8a565b73ffffffffffffffffffffffffffffffffffffffff8116611048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f7a65726f206164647265737300000000000000000000000000000000000000006044820152606401610ad6565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600d6020526040902054156110d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f73686f70206578697374656400000000000000000000000000000000000000006044820152606401610ad6565b6000600c83815481106110ea576110ea614efb565b60009182526020808320909101805473ffffffffffffffffffffffffffffffffffffffff9081168452600d90925260408084208490559490911680835293909120939093555081547fffffffffffffffffffffffff000000000000000000000000000000000000000016179055565b600b80546109ce90614dcd565b60008181526004602052604081205473ffffffffffffffffffffffffffffffffffffffff168061099b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6e6f626f6479206f776e2074686520746f6b656e0000000000000000000000006044820152606401610ad6565b60008181526004602052604090205473ffffffffffffffffffffffffffffffffffffffff16331461127f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f796f75206e6f74206f776e2074686973207061636b61676500000000000000006044820152606401610ad6565b6112888161300b565b6000818152600e60205260408082205460095491517f6957a0b200000000000000000000000000000000000000000000000000000000815260f085901c93919273ffffffffffffffffffffffffffffffffffffffff1690636957a0b290611323906004016020808252600c908201527f626c6f636b686173684d67720000000000000000000000000000000000000000604082015260600190565b60206040518083038186803b15801561133b57600080fd5b505afa15801561134f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113739190614444565b73ffffffffffffffffffffffffffffffffffffffff1663e9413d38836040518263ffffffff1660e01b81526004016113ad91815260200190565b602060405180830381600087803b1580156113c757600080fd5b505af11580156113db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ff919061478f565b90506000600c848154811061141657611416614efb565b6000918252602090912001546040517fcbc42814000000000000000000000000000000000000000000000000000000008152336004820152602481018790526044810184905273ffffffffffffffffffffffffffffffffffffffff9091169063cbc4281490606401600060405180830381600087803b15801561149857600080fd5b505af11580156114ac573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526114f291908101906146f7565b6009546040517f6957a0b200000000000000000000000000000000000000000000000000000000815260609690961b9591925060009173ffffffffffffffffffffffffffffffffffffffff90911690636957a0b29061155690600f90600401614bcf565b60206040518083038186803b15801561156e57600080fd5b505afa158015611582573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a69190614444565b905060005b825181101561169a57825160009087907fffffffffffffffffffffffffffffffffffff0000000000000000000000000000908690859081106115ef576115ef614efb565b60209081029190910101516040517f40c10f1900000000000000000000000000000000000000000000000000000000815233600482015291169190911760248201819052915073ffffffffffffffffffffffffffffffffffffffff8416906340c10f1990604401600060405180830381600087803b15801561167057600080fd5b505af1158015611684573d6000803e3d6000fd5b50505050508061169390614e21565b90506115ab565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff8216611722576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f6f776e6572206973207a65726f206164647265737300000000000000000000006044820152606401610ad6565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205490565b600c818154811061175b57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff8116915074010000000000000000000000000000000000000000900460ff1682565b6117a6612f8a565b6117b060006130e2565b565b6117ba612f8a565b73ffffffffffffffffffffffffffffffffffffffff8116611837576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f7a65726f206164647265737300000000000000000000000000000000000000006044820152606401610ad6565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600d6020526040902054156118c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f73686f70206578697374656400000000000000000000000000000000000000006044820152606401610ad6565b600c805473ffffffffffffffffffffffffffffffffffffffff9283166000818152600d60209081526040808320859055805180820190915292835260019083018181529084018555939052517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c790910180549251151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009093169190931617179055565b611987612f8a565b805161199a90600b906020840190614279565b5050565b6119a6612f8a565b80600c83815481106119ba576119ba614efb565b6000918252602090912001805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff9092169190911790555050565b600061099b600883604051611a2491906149fe565b90815260200160405180910390206001015490565b600180546109ce90614dcd565b33600081815260066020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6000611ae7612f8a565b611b1082600885604051611afb91906149fe565b90815260405190819003602001902090613159565b9392505050565b336000908152600d60205260409020548015801590611b6c5750600c8181548110611b4457611b44614efb565b60009182526020909120015474010000000000000000000000000000000000000000900460ff165b611bd2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f73686f70206e6f7420656e61626c6564000000000000000000000000000000006044820152606401610ad6565b336000908152600d6020526040812054600a54909190611bf3906001614d21565b66ffffffffffffff1660384264ffffffffff16901b611c1f60386060886131de9092919063ffffffff16565b611c2c88601060986131de565b611c398a604860a86131de565b7fffff00000000000000000000000000000000000000000000000000000000000060f088901b16171717171790506000611c74436001614d21565b6000838152600e60205260409081902082905560095490517f6957a0b200000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690636957a0b290611d0d906004016020808252600c908201527f626c6f636b686173684d67720000000000000000000000000000000000000000604082015260600190565b60206040518083038186803b158015611d2557600080fd5b505afa158015611d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5d9190614444565b73ffffffffffffffffffffffffffffffffffffffff1663d845a4b3826040518263ffffffff1660e01b8152600401611d9791815260200190565b600060405180830381600087803b158015611db157600080fd5b505af1158015611dc5573d6000803e3d6000fd5b50505050611dd38883613256565b5050505050505050565b6000611b1082600885604051611df391906149fe565b9081526040519081900360200190209061332c565b6000611e12612f8a565b611b1082600885604051611e2691906149fe565b908152604051908190036020019020906133b7565b611e46848484612a6d565b73ffffffffffffffffffffffffffffffffffffffff83163b15610f6d576040517f150b7a02000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff85169063150b7a0290611ebd903390899088908890600401614a9f565b602060405180830381600087803b158015611ed757600080fd5b505af1158015611eeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f0f91906147c5565b7fffffffff000000000000000000000000000000000000000000000000000000001614610f6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f6f6e455243373231526563656976656428292072657475726e20696e76616c6960448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610ad6565b6060600060f083901c61ffff1690506000600c8281548110611fe257611fe2614efb565b6000918252602080832091909101546040805192830188905273ffffffffffffffffffffffffffffffffffffffff909116935001604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018152908290527fe81fb33f00000000000000000000000000000000000000000000000000000000825260048201879052915061ffff9060009073ffffffffffffffffffffffffffffffffffffffff85169063e81fb33f9060240160006040518083038186803b1580156120b157600080fd5b505afa1580156120c5573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261210b91908101906146f7565b90506000805b82518110156121515782818151811061212c5761212c614efb565b60200260200101518261213f9190614d21565b915061214a81614e21565b9050612111565b5081516040516121659186916020016149b4565b604051602081830303815290604052935060005b82518110156121e65784828585848151811061219757612197614efb565b60200260200101516121a99190614d4d565b6121b39190614d39565b6040516020016121c49291906149b4565b6040516020818303038152906040529450806121df90614e21565b9050612179565b506040517f5e87f3840000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff861690635e87f3849060240160006040518083038186803b15801561224d57600080fd5b505afa158015612261573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526122a791908101906146f7565b91506000905060005b82518110156122f0578281815181106122cb576122cb614efb565b6020026020010151826122de9190614d21565b91506122e981614e21565b90506122b0565b5081516040516123049186916020016149b4565b604051602081830303815290604052935060005b82518110156123855784828585848151811061233657612336614efb565b60200260200101516123489190614d4d565b6123529190614d39565b6040516020016123639291906149b4565b60405160208183030381529060405294508061237e90614e21565b9050612318565b5061242b61239285613533565b600b805461239f90614dcd565b80601f01602080910402602001604051908101604052809291908181526020018280546123cb90614dcd565b80156124185780601f106123ed57610100808354040283529160200191612418565b820191906000526020600020905b8154815290600101906020018083116123fb57829003601f168201915b505050505061412f90919063ffffffff16565b98975050505050505050565b600f80546109ce90614dcd565b61244c612f8a565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6060816124a057600c5491505b60006124ac8484614d8a565b67ffffffffffffffff8111156124c4576124c4614f2a565b60405190808252806020026020018201604052801561250957816020015b60408051808201909152600080825260208201528152602001906001900390816124e25790505b509050835b838110156125b557600c818154811061252957612529614efb565b60009182526020918290206040805180820190915291015473ffffffffffffffffffffffffffffffffffffffff8116825274010000000000000000000000000000000000000000900460ff16151591810191909152826125898784614d8a565b8151811061259957612599614efb565b6020026020010181905250806125ae90614e21565b905061250e565b509392505050565b6125c5612f8a565b73ffffffffffffffffffffffffffffffffffffffff8116612668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610ad6565b612671816130e2565b50565b73ffffffffffffffffffffffffffffffffffffffff83166126f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f66726f6d206973207a65726f20616464726573730000000000000000000000006044820152606401610ad6565b73ffffffffffffffffffffffffffffffffffffffff821661276e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f746f206973207a65726f206164647265737300000000000000000000000000006044820152606401610ad6565b33600073ffffffffffffffffffffffffffffffffffffffff85168214806127c7575073ffffffffffffffffffffffffffffffffffffffff80861660009081526006602090815260408083209386168352929052205460ff165b905060005b8351811015612a655760008482815181106127e9576127e9614efb565b6020908102919091018101516000818152600490925260409091205490915073ffffffffffffffffffffffffffffffffffffffff888116911614612889576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f66726f6d206d757374206265206f776e657200000000000000000000000000006044820152606401610ad6565b82806128bb575060008181526005602052604090205473ffffffffffffffffffffffffffffffffffffffff8581169116145b612947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f73656e646572206d757374206265206f776e6572206f7220617070726f76616c60448201527f65640000000000000000000000000000000000000000000000000000000000006064820152608401610ad6565b60008181526005602052604090205473ffffffffffffffffffffffffffffffffffffffff16156129a657600081815260056020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555b6129b0878261415b565b73ffffffffffffffffffffffffffffffffffffffff868116600081815260026020908152604080832080548785526003845282852081905560018101825590845282842001869055858352600490915280822080547fffffffffffffffffffffffff000000000000000000000000000000000000000016841790555184938b16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a450612a5e81614e21565b90506127cc565b505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316612aea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f66726f6d206973207a65726f20616464726573730000000000000000000000006044820152606401610ad6565b73ffffffffffffffffffffffffffffffffffffffff8216612b67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f746f206973207a65726f206164647265737300000000000000000000000000006044820152606401610ad6565b60008181526004602052604090205473ffffffffffffffffffffffffffffffffffffffff848116911614612bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f66726f6d206d757374206265206f776e657200000000000000000000000000006044820152606401610ad6565b3373ffffffffffffffffffffffffffffffffffffffff84161480612c3e575060008181526005602052604090205473ffffffffffffffffffffffffffffffffffffffff1633145b80612c79575073ffffffffffffffffffffffffffffffffffffffff8316600090815260066020908152604080832033845290915290205460ff165b612d05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f73656e646572206d757374206265206f776e6572206f7220617070726f76616c60448201527f65640000000000000000000000000000000000000000000000000000000000006064820152608401610ad6565b60008181526005602052604090205473ffffffffffffffffffffffffffffffffffffffff1615612d6457600081815260056020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555b612d6e838261415b565b73ffffffffffffffffffffffffffffffffffffffff828116600081815260026020908152604080832080548785526003845282852081905560018101825590845282842001869055858352600490915280822080547fffffffffffffffffffffffff000000000000000000000000000000000000000016841790555184938716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b606081612e2657600184015491505b818311158015612e3a575060018401548211155b612ea0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f696e76616c696420696e646578000000000000000000000000000000000000006044820152606401610ad6565b6000612eac8484614d8a565b67ffffffffffffffff811115612ec457612ec4614f2a565b604051908082528060200260200182016040528015612eed578160200160208202803683370190505b509050835b83811015612f8157856001018181548110612f0f57612f0f614efb565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1682612f3c8784614d8a565b81518110612f4c57612f4c614efb565b73ffffffffffffffffffffffffffffffffffffffff90921660209283029190910190910152612f7a81614e21565b9050612ef2565b50949350505050565b60075473ffffffffffffffffffffffffffffffffffffffff1633146117b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad6565b60008181526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1661303a818361415b565b60008281526005602052604090205473ffffffffffffffffffffffffffffffffffffffff161561309957600082815260056020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555b604051829060009073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6007805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000613165838361332c565b156131725750600061099b565b506001808301805473ffffffffffffffffffffffffffffffffffffffff841660008181526020878152604082208490558386018555938152929092200180547fffffffffffffffffffffffff000000000000000000000000000000000000000016909117905592915050565b60006001831b841061324c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f73686966744c656674206f766572666c6f7700000000000000000000000000006044820152606401610ad6565b509190911b919050565b73ffffffffffffffffffffffffffffffffffffffff82166000818152600260209081526040808320805486855260038452828520819055600181018255908452828420018590558483526004909152902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055600a600081546132df90614e21565b90915550604051819073ffffffffffffffffffffffffffffffffffffffff8416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260208390526040812054600184015481108015610fa057508273ffffffffffffffffffffffffffffffffffffffff1684600101828154811061338c5761338c614efb565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614949350505050565b60006133c3838361332c565b6133cf5750600061099b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020849052604081205460018086018054929392909161340a91614d8a565b8154811061341a5761341a614efb565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff908116808452918890526040808420869055908716835282209190915560018601805491925082918490811061347557613475614efb565b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550846001018054806134d0576134d0614ecc565b6000828152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff908201810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055019055506001949350505050565b60606000600383516135459190614e5a565b90506000600384516135579190614d39565b613562906004614d4d565b9050600060036135728482614d8a565b61357c9190614e5a565b8361358857600061358b565b60045b6135989060ff1684614d21565b6135a29190614d21565b67ffffffffffffffff8111156135ba576135ba614f2a565b6040519080825280601f01601f1916602001820160405280156135e4576020820181803683370190505b5090506000805b83821015613a1357604051806060016040528060408152602001614faa60409139600288838151811061362057613620614efb565b016020015182517fff0000000000000000000000000000000000000000000000000000000000000090911690911c60f81c90811061366057613660614efb565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016838361369281614e21565b9450815181106136a4576136a4614efb565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350604051806060016040528060408152602001614faa604091396004886136fa846001614d21565b8151811061370a5761370a614efb565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916901c600489848151811061374d5761374d614efb565b016020015183517f030000000000000000000000000000000000000000000000000000000000000090911690911b9190911760f81c90811061379157613791614efb565b01602001517fff000000000000000000000000000000000000000000000000000000000000001683836137c381614e21565b9450815181106137d5576137d5614efb565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350604051806060016040528060408152602001614faa6040913960068861382b846002614d21565b8151811061383b5761383b614efb565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016901c600289613872856001614d21565b8151811061388257613882614efb565b016020015183517f0f0000000000000000000000000000000000000000000000000000000000000090911690911b9190911760f81c9081106138c6576138c6614efb565b01602001517fff000000000000000000000000000000000000000000000000000000000000001683836138f881614e21565b94508151811061390a5761390a614efb565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350604051806060016040528060408152602001614faa604091398761395e836002614d21565b8151811061396e5761396e614efb565b602091010151815160f89190911c603f1690811061398e5761398e614efb565b01602001517fff000000000000000000000000000000000000000000000000000000000000001683836139c081614e21565b9450815181106139d2576139d2614efb565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350613a0c600382614d21565b90506135eb565b841561412457604051806060016040528060408152602001614faa604091396002888381518110613a4657613a46614efb565b016020015182517fff0000000000000000000000000000000000000000000000000000000000000090911690911c60f81c908110613a8657613a86614efb565b01602001517fff00000000000000000000000000000000000000000000000000000000000000168383613ab881614e21565b945081518110613aca57613aca614efb565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508460021415613e2d57604051806060016040528060408152602001614faa60409139600488613b29846001614d21565b81518110613b3957613b39614efb565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916901c6004898481518110613b7c57613b7c614efb565b016020015183517f030000000000000000000000000000000000000000000000000000000000000090911690911b9190911760f81c908110613bc057613bc0614efb565b01602001517fff00000000000000000000000000000000000000000000000000000000000000168383613bf281614e21565b945081518110613c0457613c04614efb565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350604051806060016040528060408152602001614faa60409139600288613c5a846001614d21565b81518110613c6a57613c6a614efb565b016020015182517f0f0000000000000000000000000000000000000000000000000000000000000090911690911b60f81c908110613caa57613caa614efb565b01602001517fff00000000000000000000000000000000000000000000000000000000000000168383613cdc81614e21565b945081518110613cee57613cee614efb565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350604051806060016040528060408152602001614faa60409139600081518110613d4857613d48614efb565b01602001517fff00000000000000000000000000000000000000000000000000000000000000168383613d7a81614e21565b945081518110613d8c57613d8c614efb565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f3d000000000000000000000000000000000000000000000000000000000000008383613de781614e21565b945081518110613df957613df9614efb565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350614124565b604051806060016040528060408152602001614faa604091396004888381518110613e5a57613e5a614efb565b016020015182517f030000000000000000000000000000000000000000000000000000000000000090911690911b60f81c908110613e9a57613e9a614efb565b01602001517fff00000000000000000000000000000000000000000000000000000000000000168383613ecc81614e21565b945081518110613ede57613ede614efb565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350604051806060016040528060408152602001614faa60409139600081518110613f3857613f38614efb565b01602001517fff00000000000000000000000000000000000000000000000000000000000000168383613f6a81614e21565b945081518110613f7c57613f7c614efb565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350604051806060016040528060408152602001614faa60409139600081518110613fd657613fd6614efb565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016838361400881614e21565b94508151811061401a5761401a614efb565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f3d00000000000000000000000000000000000000000000000000000000000000838361407581614e21565b94508151811061408757614087614efb565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f3d0000000000000000000000000000000000000000000000000000000000000083836140e281614e21565b9450815181106140f4576140f4614efb565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b509095945050505050565b60608282604051602001614144929190614a1a565b604051602081830303815290604052905092915050565b60008181526003602090815260408083205473ffffffffffffffffffffffffffffffffffffffff861684526002909252822080549192909161419f90600190614d8a565b905060008282815481106141b5576141b5614efb565b90600052602060002001549050808385815481106141d5576141d5614efb565b6000918252602080832090910192909255828152600390915260409020849055825483908061420657614206614ecc565b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810183905590920190925595815260049095525050604090922080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055505050565b82805461428590614dcd565b90600052602060002090601f0160209004810192826142a757600085556142ed565b82601f106142c057805160ff19168380011785556142ed565b828001600101855582156142ed579182015b828111156142ed5782518255916020019190600101906142d2565b506142f99291506142fd565b5090565b5b808211156142f957600081556001016142fe565b600082601f83011261432357600080fd5b8135602061433861433383614cfd565b614cae565b80838252828201915082860187848660051b890101111561435857600080fd5b60005b858110156143775781358452928401929084019060010161435b565b5090979650505050505050565b8035801515811461439457600080fd5b919050565b600082601f8301126143aa57600080fd5b813567ffffffffffffffff8111156143c4576143c4614f2a565b6143f560207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614cae565b81815284602083860101111561440a57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561443957600080fd5b8135611b1081614f59565b60006020828403121561445657600080fd5b8151611b1081614f59565b6000806040838503121561447457600080fd5b823561447f81614f59565b9150602083013561448f81614f59565b809150509250929050565b6000806000606084860312156144af57600080fd5b83356144ba81614f59565b925060208401356144ca81614f59565b9150604084013567ffffffffffffffff8111156144e657600080fd5b6144f286828701614312565b9150509250925092565b6000806000806080858703121561451257600080fd5b843561451d81614f59565b9350602085013561452d81614f59565b9250604085013567ffffffffffffffff8082111561454a57600080fd5b61455688838901614312565b9350606087013591508082111561456c57600080fd5b5061457987828801614399565b91505092959194509250565b60008060006060848603121561459a57600080fd5b83356145a581614f59565b925060208401356145b581614f59565b929592945050506040919091013590565b600080600080608085870312156145dc57600080fd5b84356145e781614f59565b935060208501356145f781614f59565b925060408501359150606085013567ffffffffffffffff81111561461a57600080fd5b61457987828801614399565b6000806040838503121561463957600080fd5b823561464481614f59565b915061465260208401614384565b90509250929050565b6000806040838503121561466e57600080fd5b823561467981614f59565b946020939093013593505050565b60008060006060848603121561469c57600080fd5b83356146a781614f59565b95602085013595506040909401359392505050565b600080600080608085870312156146d257600080fd5b84356146dd81614f59565b966020860135965060408601359560600135945092505050565b6000602080838503121561470a57600080fd5b825167ffffffffffffffff81111561472157600080fd5b8301601f8101851361473257600080fd5b805161474061433382614cfd565b80828252848201915084840188868560051b870101111561476057600080fd5b600094505b83851015614783578051835260019490940193918501918501614765565b50979650505050505050565b6000602082840312156147a157600080fd5b5051919050565b6000602082840312156147ba57600080fd5b8135611b1081614f7b565b6000602082840312156147d757600080fd5b8151611b1081614f7b565b6000602082840312156147f457600080fd5b813567ffffffffffffffff81111561480b57600080fd5b610fa084828501614399565b6000806040838503121561482a57600080fd5b823567ffffffffffffffff81111561484157600080fd5b61484d85828601614399565b925050602083013561448f81614f59565b60008060006060848603121561487357600080fd5b833567ffffffffffffffff81111561488a57600080fd5b61489686828701614399565b9660208601359650604090950135949350505050565b6000602082840312156148be57600080fd5b5035919050565b600080604083850312156148d857600080fd5b82359150602083013561448f81614f59565b600080604083850312156148fd57600080fd5b8235915061465260208401614384565b6000806040838503121561492057600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b8381101561495f57815187529582019590820190600101614943565b509495945050505050565b60008151808452614982816020860160208601614da1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600083516149c6818460208801614da1565b60f09390931b7fffff000000000000000000000000000000000000000000000000000000000000169190920190815260020192915050565b60008251614a10818460208701614da1565b9190910192915050565b60008351614a2c818460208801614da1565b835190830190614a40818360208801614da1565b01949350505050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525060806040830152614a82608083018561492f565b8281036060840152614a94818561496a565b979650505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152614ade608083018461496a565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015614b3657835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101614b04565b50909695505050505050565b602080825282518282018190526000919060409081850190868401855b82811015614b9c578151805173ffffffffffffffffffffffffffffffffffffffff1685528601511515868501529284019290850190600101614b5f565b5091979650505050505050565b602081526000611b10602083018461492f565b602081526000611b10602083018461496a565b600060208083526000845481600182811c915080831680614bf157607f831692505b858310811415614c28577f4e487b710000000000000000000000000000000000000000000000000000000085526022600452602485fd5b878601838152602001818015614c455760018114614c7457614c9f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00861682528782019650614c9f565b60008b81526020902060005b86811015614c9957815484820152908501908901614c80565b83019750505b50949998505050505050505050565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614cf557614cf5614f2a565b604052919050565b600067ffffffffffffffff821115614d1757614d17614f2a565b5060051b60200190565b60008219821115614d3457614d34614e6e565b500190565b600082614d4857614d48614e9d565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614d8557614d85614e6e565b500290565b600082821015614d9c57614d9c614e6e565b500390565b60005b83811015614dbc578181015183820152602001614da4565b83811115610f6d5750506000910152565b600181811c90821680614de157607f821691505b60208210811415614e1b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614e5357614e53614e6e565b5060010190565b600082614e6957614e69614e9d565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461267157600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008116811461267157600080fdfe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5fa2646970667358221220fbec526131f5362e7b9324247abfd0bce5b68dce7fbe076b5ad7f8705d42f40f64736f6c6343000806003300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001150654669205061636b616765205465737400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035046500000000000000000000000000000000000000000000000000000000000